package edu.nepu.flink.api.partition;

import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

/**
 * @Date 2024/2/28 21:57
 * @Created by chenshuaijun
 */
public class RepartitionOperator {

    public static void main(String[] args) throws Exception {

        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        env.setParallelism(2);

        DataStreamSource<String> streamSource = env.socketTextStream("hadoop102", 9999);

        /**
         * 下面给出的是flink中重分区的算子的使用案例
         * 首先flink中有以下几个重分区的算子
         * （1）shuffle：将数据随机发送到下游分区
         * （2）rebalance： 采用轮询的方式将数据发送到下游分区中
         * （3）rescale： 同样是采用轮询的方式发送数据到下游，但是这个是子任务级别的局部轮询，
         *              比如上游并行度=2，下游并行度=4。那么第一个子任务会将他的数据轮询到下游的1，2分区，
         *              另一个子任务会将数据轮询到下游的3，4分区
         * （4）global：无论下游有多少个分区都会将数据发送到1号分区中
         * （5）broadcast：会将数据广播到下游的所有分区中
         */
        streamSource.shuffle();
        streamSource.rebalance();
        streamSource.rescale();
        streamSource.global();
        streamSource.broadcast();

        env.execute();
    }
}
